package com.york.tinyrpc.protoss.server.tcp;

import com.york.tinyrpc.protoss.server.HttpServer;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.net.NetServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 基于Vert.x实现的基于TCP连接的Web服务器
 * 发送的数据格式为 Buffer，基于Vert.x提供的字节数组缓冲区实现
 */
public class VertxTcpServer implements HttpServer {

    private static final Logger log = LoggerFactory.getLogger(VertxTcpServer.class);

    /**
     * 处理请求
     *
     * @param requestData
     * @return
     */
    private byte[] handleRequest(byte[] requestData) {
        // 在这里编写处理请求的逻辑，根据 requestData 构造响应数据并返回
        // 这里只是一个示例，实际逻辑需要根据具体的业务需求来实现
        return "Hello, client!".getBytes();
    }

    /**
     * 服务启动
     *
     * @param port
     */
    @Override
    public void doStart(int port) {
        // 创建 Vert.x 实例进而创建 TCP 服务器
        NetServer tcpServer = Vertx.vertx().createNetServer();

        // 处理请求
        // todo protoss版本：需要自定义基于TCP的Handler处理请求，现在已完成
        tcpServer.connectHandler(new VertxTcpServerHandler());

        // 启动 TCP 服务器并监听指定端口
        tcpServer.listen(port, result -> {
            if (result.succeeded()) {
                log.info("TCP server 启动-port:{} ", port);
            } else {
                log.error("未能启动 TCP server");
            }
        });
    }

    public static void main(String[] args) {
        new VertxTcpServer().doStart(8888);
    }
}
